﻿using System;
using System.Collections;
using System.Collections.Generic;
using Pap.Data;

namespace Pap.Services.FinancialServices
{
    /// <summary>
    /// 
    /// </summary>
    public interface IFinanceService
    {
        /// <summary>
        /// Gets the committee balance.
        /// </summary>
        /// <param name="committeeID">The committee ID.</param>
        /// <returns></returns>
        double GetCommitteeBalance(Guid committeeID);
        /// <summary>
        /// Gets the bank account balance.
        /// </summary>
        /// <param name="bankAccount">The bank account.</param>
        /// <returns></returns>
        double GetBankAccountBalance(ICommitteeBankAccount bankAccount);
        /// <summary>
        /// Unions the deposit committee.
        /// </summary>
        /// <param name="depositAmount">The deposit amount.</param>
        /// <param name="committeeID">The committee ID.</param>
        /// <param name="operationNumber">The operation number.</param>
        /// <param name="bankAccountNumberID">The bank account number ID.</param>
        /// <param name="depositDate">The deposit date.</param>
        /// <returns></returns>
        Guid UnionDepositCommittee(double depositAmount, Guid committeeID, string operationNumber, Guid bankAccountNumberID, DateTime depositDate);
        /// <summary>
        /// Gets the paid reciepts.
        /// </summary>
        /// <param name="projectID">The project ID.</param>
        /// <returns></returns>
        IEnumerable<IReceipt> GetPaidReciepts(Guid projectID);
        //  IEnumerable<IReceipt> GetPaidReciepts(Guid projectID, Guid committeeID);
        /// <summary>
        /// Gets the main committee balance.
        /// </summary>
        /// <returns></returns>
        double GetMainCommitteeBalance();

        IEnumerable<ILoanExecutionInstallment> GetAllDuesForCommittee(Guid committeeId);
        IEnumerable<ILoanExecutionInstallment> GetDuesForCommitteeByDate(Guid committeeId, DateTime startDate, DateTime endDate);
        IEnumerable<ILoanExecutionInstallment> GetTodayDuesForCommittee(Guid committeeId);
        IEnumerable<ILoanExecutionInstallment> GetLateDuesForCommittee(Guid committeeId);
    }
}
